package com.demo.core.service.base;

import java.util.List;

import com.demo.core.dao.base.support.ResultSearchResult;
import com.demo.core.dao.base.support.SearchArgumentSupport;
import com.demo.core.model.Record;

/**
 * 配置服务接口
 * 
 * @author ryuu.kk
 *
 */
public interface RecordService {
	
	/**
	 * 存储Record模型
	 * 如果配置RecordItem存在时,
	 * 将RecordItem持久化。
	 * @param record record模型对象
	 * @return 主键ID
	 */
	Long save(Record record);
	
	/**
	 * 判断Record模型是否存在
	 * @param id 主键ID
	 * @return 是否存在
	 */
	boolean exists(Long id);
	
	/**
	 * 更新统计次数
	 * @param count 次数Count
	 * @param objectId 对象ID
	 * @param type 类型type
	 */
	void update(int count, Long objectId, int type);
	
	/**
	 * 删除配置信息
	 * @param id 配置ID
	 */
	void delete(Long id);
	
	/**
	 * 取得配置属性
	 * @param recordId 配置ID
	 * @return 配置模型对象
	 */
	Record find(Long id);
	
	/**
	 * 取得统计信息
	 * @param objectId 对象ID
	 * @param type 统计类型
	 * @return Record 统计信息
	 */
	Record find(Long objectId, int type);
	
	/**
	 * 取得统计信息列表
	 * @param objectId 对象ID
	 * @return List<Record> 统计对象列表
	 */
	List<Record> findList(Long objectId);
	
	/**
	 * 分页查询站点审计列表
	 * @param siteId 站点ID
	 * @param args SearchArgumentSupport
	 * @return ResultSearchResult<Record>
	 */
	ResultSearchResult<Record> search(Long siteId, SearchArgumentSupport args);

	/**
	 * 重置统计信息
	 * @param siteId 站点ID
	 * @param objectId 对象ID
	 * @param objectType 对象类型
	 * @param count 统计个数
	 * @param type 类型
	 */
	void reset(Long siteId, Long objectId, String objectType, int count, byte type);
}
